当前位置:  开发笔记 > 编程语言 > 正文

{}之前没有任何关键字的目的是什么?

如何解决《{}之前没有任何关键字的目的是什么?》经验,为你挑选了3个好方法。

今天,我花了4个小时调试一个小错误:

while (++i < nb); //Notice this semicolon that i put by mistake
{
    do_stuff();
}

我不知道为什么do_stuff没有执行足够多次.当我看到自己的错误时,我想知道:为什么有人会在代码中间将代码括在括号中?有人可以解释一下吗?这是C语言演变的方式吗?(我知道由于复古兼容性原因,C的BNF包含一些奇怪的东西)你认为循环中的预增量是一件坏事,我应该像上面那样写吗?

while (i < nb)
{
    do_stuff();
    i += 1;
}

formerlyknow.. 6

为什么有人会在代码中间将代码括在括号中?

这根本不是一个奇怪的想法,但它引入了一个范围,如下例所示:

void foo () {
    int a;
    {          // start a new scope
        int b = 1;
        std::cout << b << std::endl;
    }         // end of scope, i.e. b is out of scope now
    std::cout << a << std::endl;
    std::cout << b << std::endl; // error: unknown variable b !!
    double b = 0.0;              // just fine: declares a new variable
}

您可以使用它来本地化函数内部变量的可访问性.在示例中b是临时的,并且通过将其声明放在本地范围内,我避免使用变量名称向函数范围发送垃圾邮件.



1> formerlyknow..:

为什么有人会在代码中间将代码括在括号中?

这根本不是一个奇怪的想法,但它引入了一个范围,如下例所示:

void foo () {
    int a;
    {          // start a new scope
        int b = 1;
        std::cout << b << std::endl;
    }         // end of scope, i.e. b is out of scope now
    std::cout << a << std::endl;
    std::cout << b << std::endl; // error: unknown variable b !!
    double b = 0.0;              // just fine: declares a new variable
}

您可以使用它来本地化函数内部变量的可访问性.在示例中b是临时的,并且通过将其声明放在本地范围内,我避免使用变量名称向函数范围发送垃圾邮件.



2> marcinj..:

您可能希望将所有逻辑放在while中并故意省略body.有些编译器会警告你,即.铛:

main.cpp:18:17: warning: while loop has empty body [-Wempty-body]
while (++i < nb); //Notice this semicolon that i put by mistake
                ^
main.cpp:18:17: note: put the semicolon on a separate line to silence this warning

介绍本地范围,例如:

{
   SomeClass aa;
   // some logic
}

也许并不罕见,你可能想要,在上面有人可能想要在结束括号之前调用析构函数 - 即.它会释放一些资源.



3> Slava suppor..:

我认为最常见的用途是与RAII一起使用:

{
   std::lock_guard lock(mutex);
   // code inside block is under mutex lock
}
// here mutex is released

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有